package com.yeyks.service;

import com.alibaba.fastjson.JSONObject;
import com.yeyks.wxpay.impl.MyConfig;
import com.github.binarywang.wxpay.bean.entpay.EntPayResult;
import com.github.binarywang.wxpay.service.WxPayService;
import com.yeyks.wxpay.impl.MyConfig;

import java.util.Map;

public interface PayService {

    /**
     * 服务端解析code
     * @param code
     * @return
     */
    JSONObject wxParseCode(boolean h5orsapp, String code, MyConfig config);

    /**
     * 服务端解析refreshToken
     * @param refreshToken
     * @return
     */
    JSONObject wxParseRefreshToken(String refreshToken);

    /**
     * 从解析出来的Object中获取refreshToken
     * @param jsonObject
     * @return
     */
    String wxCodeObject2RefreshToken(JSONObject jsonObject);

    /**
     * 从解析出来的Object中获取openId
     * @param jsonObject
     * @return
     */
    String wxObject2OpenId(JSONObject jsonObject);
    /**
     * 微信支付预订单
     * @param openId
     * @param body
     * @param totalFee
     * @param orderNo
     * @param createIp
     * @param notifyUrl
     * @return
     * @throws Exception
     */
    Map<String, String> wxPreOrder(
            String openId,
            String body,
            Integer totalFee,
            String orderNo,
            String createIp,
            String notifyUrl) throws Exception;

    Map<String, String> wxPreOrder(
            String openId,
            String body,
            Integer totalFee,
            String orderNo,
            String createIp,
            String notifyUrl,
            String tradeType) throws Exception;

    /**
     * 设置mock支付
     * @param mock
     */
    void setMock(boolean mock);

    /**
     * 创建微信支付通知返回信息
     * @param return_code
     * @param return_msg
     * @return
     */
    String wxCreateNotifyResult(String return_code, String return_msg);

    /**
     * 获得核心引擎
     * @return
     */
    WxPayService getEngine();

    EntPayResult wxEntPay(
            String openId, Integer amount, String createIp);

    /**
     * 微信提现
     *
     * @param userId
     * @param amount
     * @param createIp
     * @return
     */
    Boolean wxTrans(Integer userId, Integer amount, String createIp);
    Boolean wxTransV2(String openId, Integer amount, String createIp);
}
